﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Itegracion.Framework.Forms;

namespace Itegracion.iAlmacen.Forms
{
    public partial class ucDocumento : ucEdicion
    {
        protected string idsTipo;
        protected string idTipoEntidad = "2";
        public ucDocumento()
        {
            InitializeComponent();
            ensamblado = "Itegracion.iAlmacen";
            clase = "Documento";
        }

        #region Metodos
        public override void OnLoadData()
        {
            _("Itegracion.Framework", "Constante", "TraerSubCombo", new Element("tipo", "TipoDocumento"), new Element("idTipo", idsTipo))
                .Out(cbTipo);
            _("Itegracion.Framework", "Constante", "TraerCombo", new Element("tipo", "Moneda"))
                .Out(cbMoneda);
            _("Itegracion.Framework", "Constante", "TraerCombo", new Element("tipo", "ModalidadPago"))
                .Out(cbPago);
            _("Itegracion.Framework", "Constante", "TraerComboAbreviado", new Element("tipo", "Unidad"))
                .Out(Unidad);
            _("Itegracion.Framework", "Constante", "TraerCombo", new Element("tipo", "Marca"))
                .Out(Laboratorio);
        }
        public override void OnNew()
        {
            tbEstado.Text = "Activo";
            _("Nuevo")
                .Out(dgvItems);
        }
        public override void OnProperty(string id, DataGridViewCell cell)
        {
            _("Itegracion.iAlmacen", "Documento", "Traer", cell)
                .Out(tbID, tbSerie, tbNumero, dtpFecha, cbTipo, cbMoneda, cbPago, tbDocId, tbNombre, tbDireccion, 
                tbEstado, tbSubTotal, tbIGV, tbTotal, 
                dtpInicioTraslado, tbPartida, tbLlegada, cbMarcaVehiculo, tbPlaca, tbCertificadoInscripcion, 
                tbLicenciaConducir, tbComprobantePago, cbMotivoTraslado, tbRucTransporte, tbNombreTransporte,
                cbAfectaStock, dgvItems);
        }
        public override bool Activo()
        {
            return tbEstado.Text != "Anulado";
        }
        #endregion

        #region Eventos
        private void tbDocId_Leave(object sender, EventArgs e)
        {
            tbNombre.Clear();
            tbDireccion.Clear();
            _("Itegracion.iAlmacen", "Persona", "TraerByDocId", tbDocId)
                .Out(tbNombre, tbDireccion);
        }
        private void dgvItems_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            Calcular(e.RowIndex);
        }
        private void dgvItems_CellValidated(object sender, DataGridViewCellEventArgs e)
        {
            Calcular(e.RowIndex);
        }

        private void Calcular(int rowIndex)
        {
            decimal c = Convert.ToDecimal(dgvItems.Rows[rowIndex].Cells["cantidad"].Value);
            decimal pu = Convert.ToDecimal(dgvItems.Rows[rowIndex].Cells["precio_unitario"].Value);
            dgvItems.Rows[rowIndex].Cells["SubTotal"].Value = c * pu;

            CalcularTotales(ItemsIncluyeIGV());
        }

        protected virtual bool ItemsIncluyeIGV() {
            return true;
        }

        protected void CalcularTotales(bool itemsIncluyenIGV)
        {
            decimal st = 0;
            foreach (DataGridViewRow item in dgvItems.Rows)
            {
                st += Convert.ToDecimal(item.Cells["SubTotal"].Value);
            }
            if (itemsIncluyenIGV)
            {
                tbSubTotal.Text = string.Format("{0:N2}", st * 0.84746m);
                tbIGV.Text = string.Format("{0:N2}", st * 0.15254m);
                tbTotal.Text = string.Format("{0:N2}", st);
            }
            else {
                tbSubTotal.Text = string.Format("{0:N2}", st);
                tbIGV.Text = string.Format("{0:N2}", st * 18 / 100);
                tbTotal.Text = string.Format("{0:N2}", st * 118 / 100);
            }
        }

        private void dgvItems_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                e.SuppressKeyPress = true;
        }

        private void tbSerie_Leave(object sender, EventArgs e)
        {
            tbSerie.Text = tbSerie.Text.PadLeft(4, '0');
        }

        private void tbNumero_Leave(object sender, EventArgs e)
        {
            tbNumero.Text = tbNumero.Text.PadLeft(10, '0');
        }
        #endregion

        private void cbTipo_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cbTipo.SelectedValue + "" == "5" || cbTipo.SelectedValue + "" == "8")
            {
                dgvItems.Columns["peso"].Visible = true;
                dgvItems.Columns["codigo"].Visible = true;
                dgvItems.Columns["precio_unitario"].Visible = false;
                dgvItems.Columns["subTotal"].Visible = false;
                dgvItems.Columns["nroLote"].Visible = false;
                dgvItems.Columns["vencimiento"].Visible = false;
                dgvItems.Columns["laboratorio"].Visible = false;
                if (!tcCabecera.TabPages.Contains(tpGuiaRemision))
                {
                    tcCabecera.TabPages.Add(tpGuiaRemision);
                    _("Itegracion.Framework", "Constante", "TraerCombo", new Element("tipo", "MotivoTraslado"))
                        .Out(cbMotivoTraslado);
                    _("Itegracion.Framework", "Constante", "TraerCombo", new Element("tipo", "MarcaVehiculo"))
                        .Out(cbMarcaVehiculo);

                }
            }
            else 
            {
                dgvItems.Columns["peso"].Visible = false;
                dgvItems.Columns["codigo"].Visible = false;
                dgvItems.Columns["precio_unitario"].Visible = true;
                dgvItems.Columns["subTotal"].Visible = true;
                dgvItems.Columns["nroLote"].Visible = true;
                dgvItems.Columns["vencimiento"].Visible = true;
                dgvItems.Columns["laboratorio"].Visible = true;
                if (tcCabecera.TabPages.Contains(tpGuiaRemision))
                    tcCabecera.TabPages.Remove(tpGuiaRemision);
            }
        }
        public override void OnRemoveItem()
        {
            dgvItems.Rows.Remove(dgvItems.CurrentRow);
        }
    }
}
